Session Management একটি গুরুত্বপূর্ণ ধারণা যা ওয়েব অ্যাপ্লিকেশনে ব্যবহারকারী সেশন পরিচালনা করে। ওয়েব অ্যাপ্লিকেশনগুলোতে, যখন ব্যবহারকারী লগইন করে, তখন তার একটি সেশন তৈরি হয়, যার মাধ্যমে সার্ভারের সাথে তার যোগাযোগ পরিচালনা করা হয়। Spring Security-তে Session Management মূলত সেশন সুরক্ষা এবং সেশন সংক্রান্ত বিভিন্ন কার্যক্রম পরিচালনার জন্য ব্যবহৃত হয়।
Session Management কি?
Session Management হলো সেশন তৈরি, মনিটরিং, এবং পরিচালনা করার প্রক্রিয়া। এটি ব্যবহারকারীকে লগইন, অ্যাক্সেস কন্ট্রোল, সেশন টাইমআউট, সেশন ফিক্সেশন প্রতিরোধ ইত্যাদি কার্যক্রমের মাধ্যমে ওয়েব অ্যাপ্লিকেশন সুরক্ষিত করে। Spring Security এর মাধ্যমে সেশন ম্যানেজমেন্ট কাস্টমাইজ করা যায়।
একটি session সাধারণত ব্যবহারকারীর ইন্টারঅ্যাকশন, যেমন লগইন, লগআউট, বা অন্যান্য কার্যকলাপের মধ্যে সার্ভারের সাথে সংযুক্ত থাকে। সেশন সাধারণত একটি সেশন আইডি দ্বারা চিহ্নিত হয় যা কুকি হিসেবে ব্রাউজারে পাঠানো হয়।
Spring Security তে Session Management এর প্রয়োজনীয়তা
- ব্যবহারকারীর সেশন ট্র্যাকিং: সেশন ব্যবস্থাপনা ব্যবহারকারীকে ওয়েব অ্যাপ্লিকেশনের সাথে সক্রিয়ভাবে ইন্টারঅ্যাক্ট করার অনুমতি দেয়। লগইন করার পর, ওয়েব অ্যাপ্লিকেশনটি ব্যবহারকারীর সেশন ট্র্যাক করতে সক্ষম হয় এবং সঠিকভাবে অ্যাক্সেস নিয়ন্ত্রণ করতে পারে।
- Session Fixation Protection: Session Fixation হল একটি আক্রমণ যেখানে আক্রমণকারী আগে থেকেই একটি সেশন আইডি তৈরি করে এবং সেটি ব্যবহারকারীকে চাপিয়ে দিয়ে ব্যবহারকারীর সেশন হাইজ্যাক করতে পারে। Spring Security সেশন ফিক্সেশন আক্রমণ প্রতিরোধ করার জন্য সেশন আইডি পরিবর্তন করতে সক্ষম।
- Session Timeout Management: সেশন ম্যানেজমেন্ট সিস্টেম ব্যবহারকারীর সেশনটি নির্দিষ্ট সময় পর বন্ধ করে দেয়, যাতে অনুপস্থিত বা অকার্যকর সেশনগুলি অব্যবহৃত না থাকে। এটি নিরাপত্তা উন্নত করে এবং সার্ভারের সম্পদ সঞ্চয় করে।
- Concurrent Session Management: যখন একাধিক সেশন চালু থাকে, তখন সেশন ম্যানেজমেন্ট এটি কন্ট্রোল করতে সহায়তা করে। একাধিক লগইন অবস্থা পর্যবেক্ষণ এবং একটি অ্যাকাউন্টের জন্য একাধিক লগইন নিষিদ্ধ করতে এটি ব্যবহার করা হয়।
- Logout Management: সেশন ম্যানেজমেন্ট সিস্টেম লগআউট করার পর সেশন মুছে দেয়, যা নিরাপত্তা নিশ্চিত করতে সহায়ক।
Spring Security তে Session Management কনফিগারেশন উদাহরণ
Spring Security তে সেশন ম্যানেজমেন্ট কনফিগারেশন করতে HttpSecurity ব্যবহার করা হয়।
১. Session Fixation Protection
Spring Security ডিফল্টভাবে সেশন ফিক্সেশন প্রতিরোধ সক্রিয় থাকে, তবে আপনি এটি কাস্টমাইজও করতে পারেন।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.sessionManagement()
.sessionFixation().migrateSession(); // Session fixation protection
return http.build();
}
}
উপরের কনফিগারেশনে:
.sessionFixation().migrateSession()সেশন ফিক্সেশন প্রতিরোধ করার জন্য ব্যবহৃত হচ্ছে। এটি পুরানো সেশন আইডি পরিবর্তন করে এবং নতুন সেশন আইডি তৈরি করে।
২. Concurrent Session Control
Spring Security তে একাধিক সেশন ব্যবস্থাপনা করতে maximumSessions() ব্যবহার করা হয়।
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.sessionManagement()
.maximumSessions(1) // শুধুমাত্র 1টি সেশন অনুমোদন
.expiredUrl("/session-expired"); // সেশন এক্সপায়ার হলে রিডাইরেক্ট URL
return http.build();
}
}
উপরের কনফিগারেশনে:
.maximumSessions(1)কনফিগারেশনটি একে একে একাধিক সেশন নিষিদ্ধ করে এবং শুধুমাত্র একটি সেশন অনুমোদন করে।.expiredUrl("/session-expired")এর মাধ্যমে সেশন এক্সপায়ার হলে ব্যবহারকারীকে"/session-expired"পেজে রিডাইরেক্ট করা হবে।
৩. Session Timeout Configuration
আপনি Spring Security তে সেশন টাইমআউট কনফিগার করতে পারেন।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.sessionManagement()
.invalidSessionUrl("/session-invalid") // সেশন অবৈধ হলে রিডাইরেক্ট URL
.maximumSessions(1)
.expiredUrl("/session-expired")
.and()
.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED); // সেশন প্রয়োজন হলে তৈরি হবে
return http.build();
}
}
.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)সেশন সিস্টেমটি তখনই তৈরি করবে যখন এটি প্রয়োজন।
৪. Logout Handling
Spring Security তে লগআউট কনফিগার করার জন্য logout() ব্যবহার করা হয়।
http
.logout()
.logoutUrl("/logout") // লগআউটের জন্য URL
.invalidateHttpSession(true) // সেশন মুছে ফেলা হবে
.clearAuthentication(true) // ব্যবহারকারীর অথেন্টিকেশন তথ্য পরিষ্কার হবে
.logoutSuccessUrl("/login?logout"); // লগআউট সফল হলে রিডাইরেক্ট URL
এটি ব্যবহারকারী যখন লগআউট করবে তখন সেশন মুছে ফেলা হবে এবং সঠিক URL তে রিডাইরেক্ট হবে।
উপসংহার
Session Management Spring Security তে একটি অত্যন্ত গুরুত্বপূর্ণ অংশ, যা সুরক্ষিত সেশন তৈরি ও পরিচালনা করতে সাহায্য করে। এর মাধ্যমে আপনি সেশন টাইমআউট, সেশন ফিক্সেশন প্রতিরোধ, কনকারেন্ট সেশন কন্ট্রোল, লগআউট এবং আরও অনেক নিরাপত্তা ব্যবস্থা কার্যকর করতে পারেন। সঠিকভাবে সেশন ম্যানেজমেন্ট কনফিগার করলে আপনার অ্যাপ্লিকেশন অনেক বেশি সুরক্ষিত এবং ব্যবহারকারীর জন্য সহজ ও নিরাপদ হবে।
Read more